<?php

namespace Api;

use Pinenut\Action\JSON;

/**
 * Текущее состояние игры и ожидаемое от игрока действие
 *
 * 1) дать очередной этап, может вернуть:
 * 0. игра не начата
 * 1. задаём вопрос (факт)
 * 2. делаем вывод, предлагаем подтвердить его
 * 3. запрашиваем вывод в случае неверного вывода
 * 4. запрашиваем факт, отличающий догадку от факта
 * 5. спасибо за игру
 *
 *
 * @author kosh
 *        
 */
class IndexAction extends JSON {
	protected function run() {
		$round = \Round::getCurrent ( session_id () );
		if ($round) {
			
			do {
				$data = [ ];
				$repeat = false;
				switch ($round->state) {
					case \Round::STATE_NEW :
					case \Round::STATE_QUESTION :
						// если новая игра или задаётся вопрос - получить вопрос задать его пользователю
						$fact = $round->getFact ();
						$data ['fact'] = [ 
								'_id' => ( string ) $fact,
								'title' => $fact->title 
						];
						if (\Round::STATE_GUESS == $round->state) {
							$repeat = true;
						}
						break;
					case \Round::STATE_ANSWER :
						// только что ответили на вопрос - пробуем получить факт
						// или догадку...
						$fact = $round->getFact ();
						$data ['fact'] = [ 
								'_id' => ( string ) $fact,
								'title' => $fact->title 
						];
						if (\Round::STATE_ANSWER != $round->state) {
							$repeat = true;
						}
						break;
					
					case \Round::STATE_GUESS :
					case \Round::STATE_END_LOSS :
						// высказываем догадку
						$conclusion = $round->getGuess ();
						$data ['guess'] = [ 
								'_id' => ( string ) $conclusion,
								'title' => $conclusion->title 
						];
						break;
					case \Round::STATE_FACT_QUESTION :
						// предлагаем пользователю ввести факт,
						// отличающий догадку от задуманного
						$guess = $round->getGuess ();
						$data ['guess'] = [ 
								'_id' => ( string ) $guess,
								'title' => $guess->title 
						];
						
						$conclusion = $round->getConclusion ();
						if ($conclusion) {
							$data ['conclusion'] = [ 
									'_id' => ( string ) $conclusion,
									'title' => $conclusion->title 
							];
						} else {
							$data ['conclusion'] = [ 
									'title' => $round->conclusionTitle 
							];
						}
						break;
				}
			} while ( $repeat );
			$data ['state'] = $round->state;
			$data ['question'] = count($round->facts);
			// $weights = array_splice ( $round->calculateConclusions (), 0, 20 );
			// $conclusions = \Conclusion::find ()->where ( '_id', array_keys ( $weights ) )->active ( false )->all ();
			// foreach ( $conclusions as $conclusion ) {
			// $weights [( string ) $conclusion ['_id']] = [
			// 'title' => $conclusion ['title'],
			// 'weight' => $weights [( string ) $conclusion ['_id']]
			// ];
			// }
			// $data ['weights'] = $weights;
			return $data;
		} else {
			return [ 
					'state' => null 
			];
		}
	}
}